import matplotlib.pyplot as plt
import numpy as np
import pandas  as pd
import matplotlib as mpl
mpl.use('TkAgg')  # 出图设置
plt.rcParams['font.sans-serif'] = 'SimSun'#宋体设置
plt.rcParams['axes.unicode_minus'] = False   # 字符显示


# plt.pie(x=[1,2,3],#指定绘图数据
#         labels=['A','B','C'],#为饼图添加标签说明
#        )
# plt.axis('equal')  # 保证是一个圆形
# plt.show()




# 添加颜色colors
# plt.pie(x=[1, 2, 3],  # 指定绘图数据
#         labels=['A', 'B', 'C'],  # 为饼图添加标签说明
#         #         colors=["#d5695d", "#5d8ca8", "#65a479"],)#修改饼图颜色，传入颜色list
#         colors=plt.cm.get_cmap('Set3')(range(3)))  # 使用matplotlib自带颜色
#
# plt.axis('equal')  # 保证是一个圆形
# plt.show()



# # 饼图某部分突出explode
# plt.pie(x=[1,2,3],#指定绘图数据
#         labels=['A','B','C'],#为饼图添加标签说明
# #         colors=["#d5695d", "#5d8ca8", "#65a479"],)#修改饼图颜色，传入颜色list
#         colors=plt.cm.get_cmap('Set3')(range(3)),#使用matplotlib自带颜色,
#         explode =(0, 0.2, 0)),#某部分突出显示，值越大，距离中心越远，该法可解决饼图字体重叠的问题
#
# plt.axis('equal')  # 保证是一个圆形
# plt.show()


# # 格式化显示每部分数据autopct
# plt.pie(
#     x=[1, 2, 3],  #指定绘图数据
#     labels=['A', 'B', 'C'],  #为饼图添加标签说明
#     #         colors=["#d5695d", "#5d8ca8", "#65a479"],)#修改饼图颜色，传入颜色list
#     colors=plt.cm.get_cmap('Set3')(range(3)),  #使用matplotlib自带颜色,
#     explode=(0, 0.2, 0),
#     autopct='%.2f%%',  #格式化输出百分比
# )
# plt.axis('equal')  # 保证是一个圆形
# plt.show()


# # 圈中文字与中心距离pctdistance
# plt.pie(
#     x=[1, 2, 3],  #指定绘图数据
#     labels=['A', 'B', 'C'],  #为饼图添加标签说明
#     #         colors=["#d5695d", "#5d8ca8", "#65a479"],)#修改饼图颜色，传入颜色list
#     colors=plt.cm.get_cmap('Set3')(range(3)),  #使用matplotlib自带颜色,
#     explode=(0, 0.2, 0),
#     autopct='%.2f%%',
#     pctdistance=0.3,  #百分比标签与圆心的距离 默认是0.6
#
# )
#
# plt.axis('equal')  # 保证是一个圆形
# plt.show()



# # 周围标签名与中心距离labeldistance
# plt.pie(
#     x=[1, 2, 3],  #指定绘图数据
#     labels=['A', 'B', 'C'],  #为饼图添加标签说明
#     #         colors=["#d5695d", "#5d8ca8", "#65a479"],)#修改饼图颜色，传入颜色list
#     colors=plt.cm.get_cmap('Set3')(range(3)),  #使用matplotlib自带颜色,
#     explode=(0, 0.2, 0),
#     autopct='%.2f%%',
#     pctdistance=0.3,  #百分比标签与圆心的距离
#     labeldistance=1.5,  #labels与圈边界的距离，默认为1.1
# )
#
# plt.axis('equal')  # 保证是一个圆形
# plt.show()


# # 饼图开始角度startangle
# plt.pie(
#     x=[1, 2, 3],  #指定绘图数据
#     labels=['A', 'B', 'C'],  #为饼图添加标签说明
#     #         colors=["#d5695d", "#5d8ca8", "#65a479"],)#修改饼图颜色，传入颜色list
#     colors=plt.cm.get_cmap('Set3')(range(5)),  #使用matplotlib自带颜色,
#     explode=(0, 0.2, 0),
#     autopct='%.2f%%',
#     pctdistance=0.3,  #百分比标签与圆心的距离
#     labeldistance=1.5,  #labels与圈边界的距离，默认为1.1
#     startangle=45,#饼图的开始角度，默认为0度
# )
#
# plt.axis('equal')  # 保证是一个圆形
# plt.show()



# # 饼图框属性设置wedgeprops
# plt.pie(
#     x=[1, 2, 3],  #指定绘图数据
#     labels=['A', 'B', 'C'],  #为饼图添加标签说明
#     #         colors=["#d5695d", "#5d8ca8", "#65a479"],)#修改饼图颜色，传入颜色list
#     colors=plt.cm.get_cmap('Set3')(range(5)),  #使用matplotlib自带颜色,
#     explode=(0, 0.2, 0),
#     autopct='%.2f%%',
#     pctdistance=0.5,  #百分比标签与圆心的距离 默认是 0.6
#     labeldistance=1.2,  #labels与圈边界的距离，默认为1.1
#     startangle=45,  #饼图的开始角度，默认为0度
#     wedgeprops={
#         'edgecolor': 'r',  #内外框颜色
#         'linestyle': '--',  #线型
#         'alpha': 0.5,  #透明度
#         #更多参考matplotlib.patches.Wedge
#     })
#
# plt.axis('equal')  # 保证是一个圆形 有的像是被压扁了一样
# plt.show()



# # 饼图文本属性textprops
# plt.pie(
#     x=[1, 2, 3],  #指定绘图数据
#     labels=['A', 'B', 'C'],  #为饼图添加标签说明
#     #         colors=["#d5695d", "#5d8ca8", "#65a479"],)#修改饼图颜色，传入颜色list
#     colors=plt.cm.get_cmap('Set3')(range(5)),  #使用matplotlib自带颜色,
#     explode=(0, 0.2, 0),
#     autopct='%.2f%%',
#     pctdistance=0.6,  #百分比标签与圆心的距离
#     labeldistance=1.2,  #labels与圈边界的距离，默认为1.1
#     startangle=45,  #饼图的开始角度，默认为0度
#     wedgeprops={
#         'edgecolor': 'r',  #内外框颜色
#         'linestyle': '--',  #线型
#         'alpha': 0.5,  #透明度
#         #更多参考matplotlib.patches.Wedge
#     },
#     textprops={
#         'color': 'r',  #文本颜色
#         'fontsize': 16,  #文本大小
#         'fontfamily': 'FangSong',  #设置微软雅黑字体
#         #更多参考matplotlib.pyplot.text
#     })
#
# plt.axis('equal')  # 保证是一个圆形
# plt.show()


# # 加阴影 shadow= True
# plt.pie(
#     x=[1, 2, 3],  #指定绘图数据
#     labels=['A', 'B', 'C'],  #为饼图添加标签说明
#     #         colors=["#d5695d", "#5d8ca8", "#65a479"],)#修改饼图颜色，传入颜色list
#     colors=plt.cm.get_cmap('Set3')(range(5)),  #使用matplotlib自带颜色,
#     explode=(0, 0.2, 0),
#     autopct='%.2f%%',
#     pctdistance=0.6,  #百分比标签与圆心的距离
#     labeldistance=1.2,  #labels与圈边界的距离，默认为1.1
#     startangle=45,  #饼图的开始角度，默认为0度
#     shadow= True,   # 加阴影  ****
#     wedgeprops={
#         'edgecolor': 'r',  #内外框颜色
#         'linestyle': '--',  #线型
#         'alpha': 0.5,  #透明度
#         #更多参考matplotlib.patches.Wedge
#     },
#     textprops={
#         'color': 'r',  #文本颜色
#         'fontsize': 16,  #文本大小
#         'fontfamily': 'Microsoft JhengHei',  #设置微软雅黑字体
#         #更多参考matplotlib.pyplot.text
#     })
#
# plt.axis('equal')  # 保证是一个圆形
# plt.show()



# #个性化设计
# plt.figure()
#
# patches, texts, autotexts = plt.pie(
#     x=[1, 2, 3],  #返回三个对象
#     labels=['A', 'B', 'C'],
#     colors=["#d5695d", "#5d8ca8", "#65a479"],
#     explode=(0, 0.2, 0),
#     autopct='%.2f%%',
# #     autopct='%.2f%%',
#     #         explode=(0.1,0,0)
# )
# texts[0].set_color('r')  #修改A标签的颜色
# texts[1].set_size('20')  #修改B的大小
#
# #matplotlib.patches.Wedge
# patches[0].set_alpha(0.3)  #A组分设置透明度
# patches[2].set_hatch('|')  #C组分添加网格线
# patches[1].set_hatch('x')
#
# plt.legend(
#     patches,
#     ['A', 'B', 'C'],  #添加图例
#     title="Pie Learning",
#     loc="best",
#     fontsize=15)
#
# plt.title('Your pie', size=20)
# plt.axis('equal')  # 保证是一个圆形
# plt.show()




# 案例
# df = pd.read_excel('./new_guomin.xlsx')
# # 支持中文
# plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
# plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
#
# x = df.iloc[-1, 4:7]
#
# explode = (0.01, 0.02, 0.03)
#
# labels = ['第一产业', '第二产业', '第三产业']
#
# autopct = '%.1f%%'
#
# plt.pie(x=x, labels=labels, explode=explode, autopct=autopct, shadow=True)
# plt.axis('equal')
# plt.title('第一季度各个产业增加总值占比')
# plt.legend()
# plt.savefig('./占比饼图')  #  保存图片的方法
# plt.show()